package amministrazioneImpiegato;

import java.util.List;

import gestione.mgrImpiegato.ImpiegatoMgr;

import javax.annotation.Resource;
import javax.ejb.EJBContext;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.commons.codec.digest.DigestUtils;

import dataTransferOblect.ImpiegatoDTO;
import travelDreamEntities.Autenticazione;
import travelDreamEntities.Impiegato;
import travelDreamEntities.Utenti;


/**
 * Session Bean implementation class UserBean
 */
@Stateless
public class ImpiegatoMgrBean implements ImpiegatoMgr {

	@PersistenceContext
    private EntityManager em;
	
	@Resource
	private EJBContext context;
	


	@Override
	public void update(ImpiegatoDTO impiegato) {
		// TODO Auto-generated method stub
		
	}
	
	
	public Impiegato find(int id) {
    	return em.find(Impiegato.class, id);
    }
	
	public List<Impiegato> getAllImpiegato() {
    	return em.createNamedQuery(Impiegato.FIND_ALL, Impiegato.class)
                .getResultList();
    }
    
	
	   public Impiegato getPrincipalImpiegato() {
		   List<Impiegato> impiegati = getAllImpiegato();
	    	String username = getPrincipalNameImpiegato();
	    	int id=0;
	    	for (int i = 0; i < impiegati.size(); i++) {
				if (impiegati.get(i).getUtenti().getUserName().equals(username)){
					id=impiegati.get(i).getIdImpiegato();
				}	
	    	}
	    	return find(id);
	    }

	@Override
	public ImpiegatoDTO getImpiegatoDTO() {
		ImpiegatoDTO impiegatoDTO = convertToDTO(getPrincipalImpiegato());
		return impiegatoDTO;
	}
	
	@Override
	 public String getPrincipalNameImpiegato() {
	    	return context.getCallerPrincipal().getName();
	    }

    

    private ImpiegatoDTO convertToDTO(Impiegato impiegato) {
		ImpiegatoDTO impiegatoDTO = new ImpiegatoDTO();
		impiegatoDTO.setNome(impiegato.getNome());
		impiegatoDTO.setCognome(impiegato.getCognome());
		impiegatoDTO.setIdImpiegato(impiegato.getIdImpiegato());
		impiegatoDTO.setCodPersona(impiegato.getUtenti().getUserName());
		
		
		return impiegatoDTO;
	}


	@Override
	public void updateNome(ImpiegatoDTO impiegatoNew) {
		Impiegato impiegato = new Impiegato();
		impiegato=getPrincipalImpiegato();
		impiegato.setNome(impiegatoNew.getNome());
		em.merge(impiegato);
	}


	@Override
	public void updateCognome(ImpiegatoDTO impiegatoNew) {
		Impiegato impiegato = new Impiegato();
		impiegato=getPrincipalImpiegato();
		impiegato.setCognome(impiegatoNew.getCognome());
		em.merge(impiegato);
		
	}


	@Override
	public void updatePassword(ImpiegatoDTO impiegatoNew) {
		Utenti utenti = new Utenti();
		utenti=em.find(Utenti.class,getPrincipalImpiegato().getUtenti().getUserName());
		utenti.setPassword(DigestUtils.sha256Hex(impiegatoNew.getPassword()));
		em.merge(utenti);
		
	}

    

}
